<?php
    class MenuModel extends RelationModel{
    		protected $_link = array(
	            'files'=>array(
	                'mapping_type'=> HAS_MANY,
	                'class_name'=>'files',
	                'foreign_key'=>'tid',
	                'mapping_order'=>'id desc'
	            )
    		);

			//自动验证栏目添加
			protected $_validate=array(
				array('name','require','栏目名不能为空'),
				array('name','','栏目名已存在！',0,'unique',1),
				array('catid','require','请选择内容模型'),
			); 

			//自动完成栏目path值设置
			protected $_auto=array(
				array('path','pathvalue',1,'callback')
			);

			//获得栏目模型
			public function model(){
				$model=M('Model');
				$res=$model->field('id,modelname')->select();

				foreach($res as $k){
					$arr[$k['id']]=$k['modelname'];
				}
				return $arr;
			}

			//获得要添加的栏目path值的方法
			protected function pathvalue(){
				if($_POST['pid']){
					$res=$this->where(array('typeid'=>$_POST['pid']))->find();
					$path=$res['path'].','.$res['typeid'];
					return $path;
				}else{
					return 0;
				}
			}
	
			//导航栏目排序 参数：模型ID
			Public function menulist($data){

				//判断是获取所有模型还是某个模型的栏目
				if(empty($data)){
					$list=$this->field('typeid,name,seotitle,catid,pid,path,keywords,description,num,url,concat(path,",",typeid) as bpath')->order('bpath')->select();
				}else{
					$list=$this->where(array('catid'=>$data))->field('typeid,name,seotitle,catid,pid,path,keywords,description,num,url,concat(path,",",typeid) as bpath')->order('bpath')->select();
				}
				
				
				//栏目缩进				   
				foreach($list as $key=>$value){
					$count=count(explode(',',$value['bpath']))-2;
					for($i=0;$i<$count;$i++){
						$list[$key]['listid']=$count;
						$list[$key]['fh'].='———';
						$list[$key]['lj'].='-----';
					}
				}
				
				$result=self::numlist($list);
				return $result;
			}


			//递归无限栏目排序
			static public function numlist(&$data,&$list=array(),$pid=0){

				$nums=array();		//排序值数组
				$typeid=array();	//当前同级typeid数组
				$temp_array=array();	//临时栏目数组

				foreach($data as $key => $val){
					if($val['pid']==$pid){
						$temp_array[]=$val;		//取出同级栏目存入临时数组
						$nums[]=$val['num'];		//取出同级栏目排序字段
						$typeid[]=$val['typeid'];		//取出同级栏目id组成的数组
						unset($data[$key]);		//将已取出的栏目销毁
					}
				}

				//对取出的临时栏目数组进行排序
				array_multisort($nums,SORT_ASC,$temp_array);

				if($pid!==0){
					//如果不是一级栏目，将临时数组插入到栏目对应的位置
					foreach($list as $key => $val){
						//计算插入位置
						if($pid==$val['typeid']){
							$n=$key+1;
						}
					}
					
					//插入数组
					array_splice($list,$n,0,$temp_array);

				}else{
					//如果是一级栏目直接存到$list数组中
					$list=$temp_array;
				}
				
				//如果旧的数据中还有数据则继续进行递归操作
				if(!empty($data)){
					foreach($typeid as $k => $v){
						$list=self::numlist($data,$list,$v);
					}
				}

				return $list;
			}

    }
